iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
Modern Web

Parser 的深入研究系列 第 5

[Day05] - Tokenizer - 逐字分析 ( Word By Word Tokenizer )

  • 分享至 

  • xImage
  •  

昨天介紹了逐行解析 , 今天我們來說明另一個解析方法 逐字解析 吧 ~

解析方法二:逐字解析

逐字解析會需要經歷兩個步驟 , 才會變成像昨天一樣的 AST

  1. 將字串轉成 token 陣列 ( Tokenizer )
  2. 將 token 陣列轉成 AST ( Parser )

那經過 Tokenizer 後的 Token 陣列長什麼樣子呢 ?

舉個例子來說明好了:

昨天的 .env-sample 檔案:

# .env-sample file
# This is a comment
SECRET_KEY=YOURSECRETKEYGOESHERE # comment
SECRET_HASH="something-with-a-#-hash"
PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
...
Kh9NV...
...
#### 5678
-----END DSA PRIVATE KEY-----"

經過 Tokenizer 處理後,會變成下面的 Tokens

[
  { "type": "comment", "value": "# .env-sample file" },
  { "type": "comment", "value": "# This is a comment" },
  { "type": "key", "value": "SECRET_KEY" },
  { "type": "equal", "value": "=" },
  { "type": "value", "value": "YOURSECRETKEYGOESHERE" },
  { "type": "comment", "value": "# comment" },
  { "type": "key", "value": "SECRET_HASH" },
  { "type": "equal", "value": "=" },
  { "type": "value", "value": "something-with-a-#-hash" },
  { "type": "key", "value": "PRIVATE_KEY" },
  { "type": "equal", "value": "=" },
  { "type": "value", "value": "-----BEGIN RSA PRIVATE KEY-----\n...\nKh9NV...\n...\n#### 5678\n-----END DSA PRIVATE KEY-----" }
]

如下方圖片所示

明天我們將說明實作 Tokenizer 需要用的的工具 狀態機 /images/emoticon/emoticon12.gif


剛剛發現 龍哥今年的主題是 自製程式語言 ,本文應該會有部分主題與之相同的,
如果本文有解釋不清的部分,可以看龍哥的文章 (;´д`)ゞ

參考資料


上一篇
[Day04] - 逐行分析 ( Line By Line Parse )
下一篇
[Day06] - 逐字分析的行前準備(一) - 狀態機介紹
系列文
Parser 的深入研究32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
lagagain
iT邦新手 2 級 ‧ 2022-10-16 08:08:39

突然發現這是在回填去年寫不完整的內容嗎/images/emoticon/emoticon37.gif?

Tree iT邦新手 3 級 ‧ 2022-10-17 08:35:36 檢舉

被抓包了 /images/emoticon/emoticon16.gif

我要留言

立即登入留言